﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos

Public Class DiasCreditoBL
    Public Function RegistrarDiasCredito(ByVal TokenConexion As String, ByVal DiasCredito As DiasCreditoBE, ByRef codigoResp As Integer, ByRef mensajes As String) As Boolean
        Dim DiasCreditoDAL As DiasCreditoDAL = New DiasCreditoDAL("")
        mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoParaRegistrar(DiasCredito, mensajes)) Then
                DiasCreditoDAL = New DiasCreditoDAL(TokenConexion)
                If (DiasCreditoDAL.existeDia(DiasCredito.NumDias)) Then
                    codigoResp = 251
                    mensajes &= "Existe un registro con el Número de Días indicado." & vbCrLf
                    Return False
                Else
                    If (DiasCreditoDAL.registraDiasCredito(DiasCredito)) Then
                        codigoResp = 0
                        mensajes = "El Número de Días de Crédito se registro con éxito."
                        Return True
                    Else
                        codigoResp = 252
                        mensajes &= "El Número de Días de Crédito no pudo ser registrado en el sistema." & vbCrLf
                        Return False
                    End If
                End If
            Else
                codigoResp = 1
                mensajes = "El Número de Días de Crédito no es valido para registrar: " & mensajes
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.RegistrarDiasCredito")
            codigoResp = 999
            mensajes = mensajes & "Excepción al registrar Número de Días de Crédito: " & ex.Message
            Return False
        Finally
            DiasCreditoDAL = Nothing
        End Try
    End Function

    Private Function EsValidoParaRegistrar(ByRef DiasCredito As DiasCreditoBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrWhiteSpace(DiasCredito.NumDias)) Then
                mensaje &= "El Número de Días de Crédito es obligatorio, no puede ir el campo vacio." & vbCrLf
            Else
                If (DiasCredito.NumDias < 0 Or DiasCredito.NumDias > 30000) Then
                    mensaje &= "El Número de Días de Crédito debe ser mayor a 0 y menor a 30000." & vbCrLf
                End If
            End If
            If (String.IsNullOrWhiteSpace(DiasCredito.Descripcion)) Then
                mensaje &= "La descripcion del Número de Días de Crédito es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                DiasCredito.Descripcion = DiasCredito.Descripcion.Trim
                If (DiasCredito.Descripcion.Length > 50) Then
                    DiasCredito.Descripcion = DiasCredito.Descripcion.Substring(0, 50)
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaDiasCredito(ByVal TokenConexion As String, ByVal DiasCredito As DiasCreditoBE, ByRef codigoResp As Integer, ByRef mensajes As String) As Boolean
        mensajes = ""
        Dim DiasCreditoDAL As DiasCreditoDAL = New DiasCreditoDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoParaRegistrar(DiasCredito, mensajes)) Then
                DiasCreditoDAL = New DiasCreditoDAL(TokenConexion)
                If (DiasCreditoDAL.existeDia(DiasCredito.NumDias, DiasCredito.IdDiasCredito)) Then
                    codigoResp = 251
                    mensajes &= "Existe un registro con el Número de Dias indicado." & vbCrLf
                    Return False
                Else
                    If (DiasCreditoDAL.actualizaDiasCredito(DiasCredito)) Then
                        codigoResp = 0
                        mensajes = "Datos de Número de Días de Crédito Actualizados."
                        Return True
                    Else
                        codigoResp = 253
                        mensajes = "No se pudo realizar la actualización de Número de Días de Crédito."
                        Return False
                    End If
                End If
            Else
                codigoResp = 1
                mensajes = "La informacion no es valida para actualizar: " & mensajes
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.ActualizaDiasCredito")
            codigoResp = 999
            mensajes = mensajes & "Excepción al actualizar Número de Días de Crédito: " & ex.Message
            Return False
        Finally
            DiasCreditoDAL = Nothing
        End Try
    End Function

    Public Function GetDiasCredito(ByVal tokenConexion As String, ByVal IdDiasCredito As Integer, ByRef codigoResp As Integer, ByRef mensajes As String) As DiasCreditoBE
        mensajes = ""
        Dim DiasCreditoDAL As DiasCreditoDAL = New DiasCreditoDAL("")
        Dim DiasCreditoBE As DiasCreditoBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetDiasCredito(IdDiasCredito, mensajes)) Then
                DiasCreditoDAL = New DiasCreditoDAL(tokenConexion)
                DiasCreditoBE = DiasCreditoDAL.getDiasCredito(IdDiasCredito)
                If (DiasCreditoBE IsNot Nothing) Then
                    codigoResp = 0
                    mensajes = "Se obtuvo la información de Número de Días de Crédito con éxito."
                    Return DiasCreditoBE
                Else
                    codigoResp = 254
                    mensajes = "No se obtuvo la información de Número de Días de Crédito"
                    Return Nothing
                End If
            Else
                codigoResp = 1
                mensajes = "El ID de Número de Días de Crédito contiene valor invalido " & mensajes
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.GetDiasCredito")
            codigoResp = 999
            mensajes = mensajes & "Excepción al obtener información de Número de Días de Crédito: " & ex.Message
            Return Nothing
        Finally
            DiasCreditoDAL = Nothing
            DiasCreditoBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetDiasCredito(ByRef IdDiasCredito As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdDiasCredito)) Then
                mensaje &= "El campo ID de Número de Días de Crédito no puede ir  vacio." & vbCrLf
            Else
                If (IdDiasCredito <= 0) Then
                    mensaje &= String.Format("El ID <{0}> de Númer de Días de Crédito debe ser un valor mayor a 0", IdDiasCredito) & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.EsValidoParaGetDiasCredito")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoDiasCredito(ByVal tokenConexion As String, ByRef codigoResp As Integer, ByRef mensajes As String) As List(Of DiasCreditoBE)
        mensajes = ""
        Dim DiasCreditoDAL As DiasCreditoDAL = New DiasCreditoDAL("")
        Dim listDiasCreditoBE As List(Of DiasCreditoBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            DiasCreditoDAL = New DiasCreditoDAL(tokenConexion)
            listDiasCreditoBE = DiasCreditoDAL.getListadoDiasCredito()
            If (listDiasCreditoBE IsNot Nothing) Then
                codigoResp = 0
                mensajes = "Se obtuvo el listado de Número de Días de Crédito con éxito."
                Return listDiasCreditoBE
            Else
                codigoResp = 255
                mensajes = "No se obtuvo el listado de Número de Días de Crédito."
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "DiasCreditoBL.GetListadoDiasCredito")
            codigoResp = 999
            mensajes = mensajes & "Excepción al obtener el listado de Número de Días de Crédito: " & ex.Message
            Return Nothing
        Finally
            DiasCreditoDAL = Nothing
            listDiasCreditoBE = Nothing
        End Try
    End Function

End Class
